﻿using System;
using System.Collections.Generic;
using System.Linq;

namespace Scommesse.Model
{
    [Serializable]
    public abstract class Scommessa
    {
        protected Scommessa()
        {
        }

        protected Scommessa(Scommessa scommessa)
        {
            Importo = scommessa.Importo;
            Puntate = scommessa.Puntate;
            ScommessaController = scommessa.ScommessaController;
        }

        public float Importo { get; set; }

        public List<Quota> Puntate { get; set; }

        public ScommessaController ScommessaController { get; protected set; }

        public bool ContainsEvento(Evento evento)
        {
            return Puntate.Any(quota => quota.GetEvento().Equals(evento));
        }

        public abstract bool Controllabile();

        public abstract void ControllaScommessa(ScommessaController controller);

        public float Moltiplicatore
        {
            get { return Puntate.Aggregate(1.0F, (current, quota) => current*quota.Moltiplicatore); }
        }

        public float TotaleVincita
        {
            get { return Moltiplicatore*Importo; }
        }
    }
}